<?php

/**
 * api控制器基类
 */
class ApiApp extends ECBaseApp
{

    function __construct()
    {
        $this->ApiApp();
    }

    /**
     *
     */
    function ApiApp()
    {
        parent::__construct();
        //加载语言项
        Lang::load(lang_file('apicomponent/common'));
        if (is_file(lang_file('apicomponent/' . APP))) {
            Lang::load(lang_file('apicomponent/' . APP));
        }
    }

    function _init_visitor()
    {
        $this->visitor =& env('visitor', new ApiVisitor());
    }

    //重新定义和模版相关的这些方法 api 不使用模版
    function _config_view()
    {
    }

    function display($f)
    {
    }

    function assign($k, $v)
    {
    }

    /**
     * 返回格式化后的数据
     * @author jeff liu
     * @param mixed $value 待格式化的值
     * @param boolean $urlencode 是否需要urlencode
     * @param boolean $recursion 是否处在递归中
     * @return string
     */
    function return_result($value, $urlencode = true, $format = 'json')
    {
        if ($urlencode) { //需要进行urlencode
            $value = $this->_deep_url_encode($value);
        }

        $value = $this->_format_result($value, $format);
        ; //json_encode($value);
        return $value;
    }

    /**
     * 直接输出结果
     * @param type $value
     * powered by jeff liu
     */
    function echo_result($value)
    {
        $urlencode = isset ($_REQUEST['urlencode']) && $_REQUEST['urlencode'] == '0' ? false : true; //默认使用urlencode
        echo $this->return_result($value, $urlencode);
    }

    function alert_result($value, $urlencode = true)
    {
        echo '<script>';
        echo 'var result_tmp = ' . $this->return_result($value, $urlencode) . ';';
        echo 'alert(result_tmp)';
        echo '</script>';
    }

    /**
     * 执行登陆操作
     * 这个函数要跟 frontend.base.php 中的 _do_login 保持一致
     */
    function _do_login($user_id)
    {
        $mod_user =& m('member');

        $user_info = $mod_user->get(
            array(
                'conditions' => "user_id = '{$user_id}'",
                'join' => 'has_store',
                'fields' => 'user_id, user_name, reg_time, last_login, last_ip, store_id',
            )
        );

        /* 店铺ID */
        $my_store = empty($user_info['store_id']) ? 0 : $user_info['store_id'];

        /* 保证基础数据整洁 */
        unset($user_info['store_id']);

        /* 分派身份 */
        $this->visitor->assign($user_info);

        /* 更新用户登录信息 */
        $mod_user->edit(
            "user_id = '{$user_id}'",
            "last_login = '" . gmtime() . "', last_ip = '" . real_ip() . "', logins = logins + 1"
        );

    }

    /**
     * 执行退出操作
     */
    function _do_logout()
    {
        $this->visitor->logout();
    }

    /**
     * 获得商品id
     * @return type
     */
    function _get_goods_ids()
    {
        $goods_id = $_REQUEST['id'];
        $goods_ids = array();
        if (empty($goods_id)) {
            ApiError::showError('goods_id_required', 1);
            return;
        }
        $goods_ids_arr = explode(',', $goods_id);
        foreach ((array)$goods_ids_arr as $tmp_id) {
            if (!empty($tmp_id)) {
                $goods_ids[] = $tmp_id;
            }
        }

        return $goods_ids;
    }

    /**
     * 获得分页信息
     * @param type $page_per
     * @return type
     */
    function _get_page($page_per = 10)
    {
        $page = empty($_REQUEST['page']) ? 1 : intval($_REQUEST['page']);
        $page = $page < 1 ? 1 : $page;
        $start = ($page - 1) * $page_per;
        return array('limit' => "{$start},{$page_per}", 'curr_page' => $page, 'pageper' => $page_per);
    }

    /**
     * 递归的执行url encode
     * @param type $data
     * @param type $urlencode
     */
    function _deep_url_encode($data)
    {
        if (is_array($data)) {
            foreach ($data as $k => $v) {
                $data[$k] = $this->_deep_url_encode($v);
            }
        } else {
            if (!is_object($data) && !is_resource($data)) {
                $data = urlencode($data);
            }
        }
        return $data;
    }

    /**
     * 跟就给定的结果格式化数据
     * @param mixed $data 待格式化的数据
     * @param string $format 格式化方式
     */
    function _format_result($data, $format)
    {
        switch ($format) {
//            case 'xml':
//                import('');
//                $data = array2xml();
//                break;
            case 'json':
            default:
                $data = json_encode($data);
                break;
        }
        return $data;
    }

}

/**
 *    api访问者
 */
class ApiVisitor extends BaseVisitor
{
    var $_info_key = 'user_info';
}

?>